package com.Nuyoah.demo01.controller;

import com.Nuyoah.demo01.DTO.RoleBindDTO;
import com.Nuyoah.demo01.DTO.UserDTO;
import com.Nuyoah.demo01.DTO.UserPageQry;
import com.Nuyoah.demo01.VO.UserVO;
import com.Nuyoah.demo01.common.JsonResult;
import com.Nuyoah.demo01.service.UserService;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

@RestController
@RequestMapping("/api/admin")
@Slf4j
public class AdminController {

    @Resource
    private UserService userService;

    /**
     * 删除用户
     */
    @PostMapping("/user/delete")
    public JsonResult deleteUser(@RequestParam("id") Integer id) {
        log.info("删除用户: " + id);
        return userService.deleteUser(id);
    }

    /**
     * 封禁用户
     */
    @PostMapping("/user/ban")
    public JsonResult banUser(@RequestParam("id") Integer id) {
        log.info("封禁用户: " + id);
        return userService.banUser(id);
    }

    /**
     * 解封用户
     */
    @PostMapping("/user/unban")
    public JsonResult unbanUser(@RequestParam("id") Integer id) {
        log.info("解封用户: " + id);
        return userService.unbanUser(id);
    }

    /**
     * 获取所有用户信息
     *
     * @return 用户信息列表
     */
    @PostMapping("/user/selectAllUsers")
    public JsonResult selectAllUsers() {
        return userService.selectAllUsers();
    }

    /**
     * 分页查询用户
     * @return 用户列表
     */
    @PostMapping("/user/selectPageUsers")
    public JsonResult<List<UserDTO>> selectPageUsers(@RequestBody UserPageQry qry) {
        // 处理 userPageQry 可能为 null 的情况
        if (qry == null) {
            qry = new UserPageQry(); // 使用默认值
        }
        try {
            List<UserDTO> userList = userService.selectPageUsers(qry);
            return new JsonResult<>(userList, "获取成功");
        } catch (Exception e) {
            // 捕获异常，返回错误信息
            e.printStackTrace(); // 打印异常堆栈信息，便于调试
            return new JsonResult<>("1", "获取失败：" + e.getMessage());
        }
    }

    /**
     * 根据id获取用户信息
     *
     * @param id 用户id
     * @return 用户信息
     */
    @PostMapping("/user/getUserById")
    public JsonResult<UserVO> getUserById(@RequestParam("id") Integer id) {
        try {
            UserVO user = userService.getUserById(id);
            return new JsonResult<>(user, "获取成功");
        } catch (Exception e) {
            // 捕获异常，返回错误信息
            e.printStackTrace(); // 打印异常堆栈信息，便于调试
            return new JsonResult<>("1", "获取失败：" + e.getMessage());
        }
    }

//    设置管理员

    /**
     * 设置管理员
     * @param id
     * @return
     */
    @PostMapping("/setAdmin")
    public JsonResult setAdmin(@RequestParam("id") Integer id) {
        log.info("设置管理员: " + id);
        return userService.setAdmin(id);
    }

    /**
     * 给账号绑定角色
     */
    @PostMapping("/user/bindRole")
    public JsonResult<String> bindRole(@RequestBody RoleBindDTO roleBindDTO){
        log.info("绑定角色: " + roleBindDTO);
        return userService.bindRole(roleBindDTO);
    }

    /**
     * 给角色赋权
     */
    @PostMapping("/role/assignRole/{roleId}/{permId}")
    public JsonResult<String> assignRole(@PathVariable Integer roleId,@PathVariable Integer permId){
        log.info("赋权: " + roleId + " " + permId);
        return userService.assignRole(roleId, permId);
    }
}